package com.easytouch.core.utils;

import java.util.Random;

public class OrderGenerator {

    private static int mCountMach = 1; //3位流水号
    private static int mCountTrace = 1; //6位trace
    private static boolean isInit = false; //是否初始化

    public static void init()
    {
        Random random = new Random(System.currentTimeMillis());
        mCountMach = random.nextInt(999) + 1;
        mCountTrace = random.nextInt(999999) + 1;
        isInit = true;
    }

    /**
     * 获取3位唯一流水号
     * @return 流水号
     */
    public synchronized static String getNextMach()
    {
        if(!isInit)
        {
            init();
        }
        String result = Tools.addLeftZero(String.valueOf(mCountMach), 3);
        mCountMach++;
        if(mCountMach > 999)
        {
            mCountMach = 1;
        }
        return result;
    }

    /**
     * 获取6位唯一流水号
     * @return 流水号
     */
    public synchronized static String getNextTrace()
    {
        if(!isInit)
        {
            init();
        }
        String result = Tools.addLeftZero(String.valueOf(mCountTrace), 6);
        mCountTrace++;
        if(mCountTrace > 999999)
        {
            mCountTrace = 1;
        }
        return result;
    }

    /**
     * 生成唯一订单号（无机器编号）
     * @return 流水号
     */
    public synchronized static String generateOrder()
    {
        long time = System.currentTimeMillis();
        return String.valueOf(time) + getNextMach();
    }

    /**
     * 生成22位订单号，机器号+时间
     * @param mac 机器号
     * @return 订单号
     */
    public synchronized static String generateOrder(String mac)
    {
        return mac + Tools.getCurrentTime();
    }

    /**
     * 生成25位唯一订单号，机器号+时间+3位流水号
     * @param mac 机器号
     * @return 订单号
     */
    public synchronized static String generateUniqueOrder(String mac)
    {
        return generateOrder(mac) + getNextMach();
    }
}
